package com.cs.beneficios.business.entity;

import com.cs.beneficios.business.model.RestriccionVO;
//import com.cs.beneficios.business.model.SubProgramaVO;
import com.cs.beneficios.common.ConnectionFactory;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

//import java.util.ArrayList;
//import java.util.Collection;


public class RestriccionDAO
{
  /**
   * Conexion a la base de datos.
   */
  private Connection conn = null;
  private ConnectionFactory cf;

  /**
   * Constructor que inicializa la conexion con la base de datos.
   * @param conn Conexion con la base de datos.
   */
   
  public RestriccionDAO(ConnectionFactory cf)
  {
    this.cf = cf;
    try{
        this.conn = this.cf.getConnection();
      }catch(SQLException e){}
  }
  
  public Connection getConn()
  {
    return conn;
  }
  
  
  public String[] ValidarRestriccion(String CodigoAtri, String CodRest, String Valor, String TipoDato) throws SQLException 
  {
    int iCodAtri=Integer.parseInt(CodigoAtri.trim());
    int iCodRest = Integer.parseInt(CodRest.trim());
    String retorno[] = new String[3];
    
    String strQuery = "SELECT OPERADOR,OPERANDO1,OPERANDO2,ALERTA,VIGENCIA,CAMPO_A4 "+
                      "FROM TCS_BEN_RESTRICCION WHERE CODIGO="+iCodRest+" ";
    
    ResultSet rst = null;
    rst = cf.getRecordsRset(strQuery,null,conn);
		              
    if( rst.next() ) 
		{
        String strOperador = rst.getString("OPERADOR");
        String strOperando1 = rst.getString("OPERANDO1");
        String strOperando2 = rst.getString("OPERANDO2");
        String strAlerta = rst.getString("ALERTA");
        String strVigencia = rst.getString("VIGENCIA");
        String strCampoA4 = rst.getString("CAMPO_A4");
        if((Object)strCampoA4 == null)
          strCampoA4 = "";

        if(strAlerta.equals("S"))
        {
          retorno[0] = "S";
        }else
        {
          retorno[0] = "N";
        }
        if(strVigencia.equals("A"))
        {
          int iOperador = Integer.parseInt(strOperador.trim());
          
          switch(iOperador){ 
            case 1: 
              if(!TipoDato.equals("F"))
              {
                int iValor=Integer.parseInt(Valor.trim());
                int iOperando1 = Integer.parseInt(strOperando1.trim());
                if(iValor > iOperando1)
                {
                  retorno[1] = "true";
                }else
                {
                  retorno[1] = "false";
                  if(strCampoA4.equals(""))
                  {
                    retorno[2] = "Mayor a "+strOperando1;
                  }else
                  {
                    retorno[2] = "Mayor a "+strCampoA4;
                  }
                  
                  
                }
              }else
              {
                int fecha1 = 0;
                int fecha2 = 0;
                String ArrFecha1[] = Valor.split("/");
                fecha1 = Integer.valueOf(ArrFecha1[0]).intValue()+Integer.valueOf(ArrFecha1[1]).intValue()+Integer.valueOf(ArrFecha1[2]).intValue();
               
                
                String ArrFecha2[] = strOperando1.split("-");
                fecha2 = Integer.valueOf(ArrFecha2[0]).intValue()+Integer.valueOf(ArrFecha2[1]).intValue()+Integer.valueOf(ArrFecha2[2]).intValue();
                
                
                if (fecha1 > fecha2)
                {
                  retorno[1] = "true";
                }else
                {
                  retorno[1] = "false";
                  if(strCampoA4.equals(""))
                  {
                    retorno[2] = "Mayor a "+strOperando1;
                  }else
                  {
                    retorno[2] = "Mayor a "+strCampoA4;
                  }
                  
                }
              }
            break;
            
            case 2: 
              if(!TipoDato.equals("F"))
              {
                int iValor=Integer.parseInt(Valor.trim());
                int iOperando1 = Integer.parseInt(strOperando1.trim());
                if(iValor < iOperando1)
                {
                  retorno[1] = "true";
                }else
                {
                  retorno[1] = "false";
                  if(strCampoA4.equals(""))
                  {
                     retorno[2] = "Menor a "+strOperando1;
                  }else
                  {
                    retorno[2] = "Menor a "+strCampoA4;
                  }
                 
                }
              }else
              {
                int fecha1 = 0;
                int fecha2 = 0;
                String ArrFecha1[] = Valor.split("/");
                fecha1 = Integer.valueOf(ArrFecha1[0]).intValue()+Integer.valueOf(ArrFecha1[1]).intValue()+Integer.valueOf(ArrFecha1[2]).intValue();
               
                
                String ArrFecha2[] = strOperando1.split("-");
                fecha2 = Integer.valueOf(ArrFecha2[0]).intValue()+Integer.valueOf(ArrFecha2[1]).intValue()+Integer.valueOf(ArrFecha2[2]).intValue();
                
                
                if (fecha1 < fecha2)
                {
                  retorno[1] = "true";
                }else
                {
                  retorno[1] = "false";
                  if(strCampoA4.equals(""))
                  {
                     retorno[2] = "Menor a "+strOperando1;
                  }else
                  {
                    retorno[2] = "Menor a "+strCampoA4;
                  }
                 
                }
              }
            break;
            case 3: 
              if(TipoDato.equals("N"))
              {
                int iValor=Integer.parseInt(Valor.trim());
                int iOperando1 = Integer.parseInt(strOperando1.trim());
                if(iValor == iOperando1)
                {
                  retorno[1] = "true";
                }else
                {
                  retorno[1] = "false";
                  if(strCampoA4.equals(""))
                  {
                    retorno[2] = "Igual a "+strOperando1;
                  }else
                  {
                    retorno[2] = "Igual a "+strCampoA4;
                  }
                  
                }
              }else
                if(TipoDato.equals("F"))
                {
                  int fecha1 = 0;
                  int fecha2 = 0;
                  String ArrFecha1[] = Valor.split("/");
                  fecha1 = Integer.valueOf(ArrFecha1[0]).intValue()+Integer.valueOf(ArrFecha1[1]).intValue()+Integer.valueOf(ArrFecha1[2]).intValue();
                 
                  
                  String ArrFecha2[] = strOperando1.split("-");
                  fecha2 = Integer.valueOf(ArrFecha2[0]).intValue()+Integer.valueOf(ArrFecha2[1]).intValue()+Integer.valueOf(ArrFecha2[2]).intValue();
                  
                  
                  if (fecha1 == fecha2)
                  {
                    retorno[1] = "true";
                  }else
                  {
                    retorno[1] = "false";
                    if(strCampoA4.equals(""))
                    {
                      retorno[2] = "Igual a "+strOperando1;
                    }else
                    {
                      retorno[2] = "Igual a "+strCampoA4;
                    }
                   
                  }
                }else
                {
                   if (Valor.equals(strOperando1))
                   {
                     retorno[1] = "true";
                   }else
                   {
                     retorno[1] = "false";
                     if(strCampoA4.equals(""))
                    {
                      retorno[2] = "Igual a "+strOperando1;
                    }else
                    {
                      retorno[2] = "Igual a "+strCampoA4;
                    }
                     
                   }
                }
            break;
            
            case 4: 
              if(!TipoDato.equals("F"))
              {
                int iValor=Integer.parseInt(Valor.trim());
                int iOperando1 = Integer.parseInt(strOperando1.trim());
                if(iValor >= iOperando1)
                {
                  retorno[1] = "true";
                }else
                {
                  retorno[1] = "false";
                  if(strCampoA4.equals(""))
                  {
                    retorno[2] = "Mayor o Igual a "+strOperando1;
                  }else
                  {
                    retorno[2] = "Mayor o Igual a"+strCampoA4;
                  }
                  
                }
              }else
              {
                int fecha1 = 0;
                int fecha2 = 0;
                String ArrFecha1[] = Valor.split("/");
                fecha1 = Integer.valueOf(ArrFecha1[0]).intValue()+Integer.valueOf(ArrFecha1[1]).intValue()+Integer.valueOf(ArrFecha1[2]).intValue();
               
                
                String ArrFecha2[] = strOperando1.split("-");
                fecha2 = Integer.valueOf(ArrFecha2[0]).intValue()+Integer.valueOf(ArrFecha2[1]).intValue()+Integer.valueOf(ArrFecha2[2]).intValue();
                
                
                if (fecha1 >= fecha2)
                {
                  retorno[1] = "true";
                }else
                {
                  retorno[1] = "false";
                  if(strCampoA4.equals(""))
                  {
                    retorno[2] = "Mayor o Igual a "+strOperando1;
                  }else
                  {
                    retorno[2] = "Mayor o Igual a"+strCampoA4;
                  }
                  
                }
              }
            break;
            case 5: 
              if(!TipoDato.equals("F"))
              {
                int iValor=Integer.parseInt(Valor.trim());
                int iOperando1 = Integer.parseInt(strOperando1.trim());
                if(iValor <= iOperando1)
                {
                  retorno[1] = "true";
                }else
                {
                  retorno[1] = "false";
                  if(strCampoA4.equals(""))
                  {
                    retorno[2] = "Menor o Igual a "+strOperando1;
                  }else
                  {
                    retorno[2] = "Menor o Igual a"+strCampoA4;
                  }
                  
                }
              }else
              {
                int fecha1 = 0;
                int fecha2 = 0;
                String ArrFecha1[] = Valor.split("/");
                fecha1 = Integer.valueOf(ArrFecha1[0]).intValue()+Integer.valueOf(ArrFecha1[1]).intValue()+Integer.valueOf(ArrFecha1[2]).intValue();
               
                
                String ArrFecha2[] = strOperando1.split("-");
                fecha2 = Integer.valueOf(ArrFecha2[0]).intValue()+Integer.valueOf(ArrFecha2[1]).intValue()+Integer.valueOf(ArrFecha2[2]).intValue();
                
                
                if (fecha1 <= fecha2)
                {
                  retorno[1] = "true";
                }else
                {
                  retorno[1] = "false";
                  if(strCampoA4.equals(""))
                  {
                    retorno[2] = "Menor o Igual a "+strOperando1;
                  }else
                  {
                    retorno[2] = "Menor o Igual a"+strCampoA4;
                  }
                 
                }
              }
            break;
           
           case 6: 
              if(TipoDato.equals("N"))
              {
                int iValor=Integer.parseInt(Valor.trim());
                int iOperando1 = Integer.parseInt(strOperando1.trim());
                if(iValor != iOperando1)
                {
                  retorno[1] = "true";
                }else
                {
                  retorno[1] = "false";
                  if(strCampoA4.equals(""))
                  {
                    retorno[2] = "Diferente a "+strOperando1;
                  }else
                  {
                    retorno[2] = "Diferente a"+strCampoA4;
                  }
                  
                }
              }else
                if(TipoDato.equals("F"))
                {
                  int fecha1 = 0;
                  int fecha2 = 0;
                  String ArrFecha1[] = Valor.split("/");
                  fecha1 = Integer.valueOf(ArrFecha1[0]).intValue()+Integer.valueOf(ArrFecha1[1]).intValue()+Integer.valueOf(ArrFecha1[2]).intValue();
                 
                  
                  String ArrFecha2[] = strOperando1.split("-");
                  fecha2 = Integer.valueOf(ArrFecha2[0]).intValue()+Integer.valueOf(ArrFecha2[1]).intValue()+Integer.valueOf(ArrFecha2[2]).intValue();
                  
                  
                  if (fecha1 != fecha2)
                  {
                    retorno[1] = "true";
                  }else
                  {
                    retorno[1] = "false";
                    if(strCampoA4.equals(""))
                    {
                      retorno[2] = "Diferente a "+strOperando1;
                    }else
                    {
                      retorno[2] = "Diferente a"+strCampoA4;
                    }
                   
                  }
                }else
                {
                   if (!Valor.equals(strOperando1))
                   {
                     retorno[1] = "true";
                   }else
                   {
                     retorno[1] = "false";
                     if((Object)strCampoA4 == null)
                    {
                      retorno[2] = "Diferente a "+strOperando1;
                    }else
                    {
                      retorno[2] = "Diferente a"+strCampoA4;
                    }
                     
                   }
                }
            break;
            
            case 7: 
              if(TipoDato.equals("N"))
              {
                int iValor=Integer.parseInt(Valor.trim());
                int iOperando1 = Integer.parseInt(strOperando1.trim());
                int iOperando2 = Integer.parseInt(strOperando2.trim());
                if(iValor >= iOperando1 && iValor <= iOperando2)
                {
                  retorno[1] = "true";
                }else
                {
                  retorno[1] = "false";
                  retorno[2] = "Entre "+strOperando1+" y "+strOperando2;
                }
              }else
              {
                if(TipoDato.equals("F"))
                {
                  int fecha1 = 0;
                  int fecha2 = 0;
                  int fecha3 = 0;
                  String ArrFecha1[] = Valor.split("/");
                  fecha1 = Integer.valueOf(ArrFecha1[0]).intValue()+Integer.valueOf(ArrFecha1[1]).intValue()+Integer.valueOf(ArrFecha1[2]).intValue();
                 
                  
                  String ArrFecha2[] = strOperando1.split("-");
                  fecha2 = Integer.valueOf(ArrFecha2[0]).intValue()+Integer.valueOf(ArrFecha2[1]).intValue()+Integer.valueOf(ArrFecha2[2]).intValue();
                  
                  String ArrFecha3[] = strOperando2.split("-");
                  fecha3 = Integer.valueOf(ArrFecha3[0]).intValue()+Integer.valueOf(ArrFecha3[1]).intValue()+Integer.valueOf(ArrFecha3[2]).intValue();
                  
                  if (fecha1 <= fecha2)
                  {
                    retorno[1] = "true";
                  }else
                  {
                    retorno[1] = "false";
                    retorno[2] = "Entre "+strOperando1+" y "+strOperando2;
                  }
                }
              }
            break;
            
          }
        }else
        {
          retorno[1] = "true";
          
        }
    }
    rst.close();
    return retorno;
		
		
  }
  
  
  public RestriccionVO getRestriccion(String CodRest) throws SQLException 
  {
   
    int iCodRest = Integer.parseInt(CodRest.trim());
       
    String strQuery = "SELECT CODIGO,DESCRIPCION,OPERADOR,OPERANDO1,OPERANDO2,ALERTA,VIGENCIA "+
                      "FROM TCS_BEN_RESTRICCION WHERE CODIGO="+iCodRest+" ";
    
    ResultSet rst = null;
    rst = cf.getRecordsRset(strQuery,null,conn);
		RestriccionVO objRestriVO = new RestriccionVO();              
    if( rst.next() ) 
		{
        objRestriVO.setCodigo(rst.getString("CODIGO"));
        objRestriVO.setDescripcion(rst.getString("DESCRIPCION"));
        objRestriVO.setOperador(rst.getString("OPERADOR"));
        objRestriVO.setOperando1(rst.getString("OPERANDO1"));
        objRestriVO.setOperando2(rst.getString("OPERANDO2"));
        objRestriVO.setAlerta(rst.getString("ALERTA"));
        objRestriVO.setVigencia(rst.getString("VIGENCIA"));
    }
    rst.close();
    return objRestriVO;
  }
  
  public int ModificarRestriccion(String strCodRest, String Arr[])throws SQLException {
     
    int iCodRestric=Integer.parseInt(strCodRest.trim());
    
    String query = "UPDATE TCS_BEN_RESTRICCION SET "+
                   "DESCRIPCION = upper(?), "+
                   "OPERADOR = ?, "+
                   "OPERANDO1 = upper(?), "+
                   "OPERANDO2 = upper(?), "+
                   "ALERTA = ?, "+
                   "VIGENCIA = ?, "+
                   "CAMPO_A4 = ? "+
                   "WHERE CODIGO="+iCodRestric+"";
                   
     int ActualizoCorrectamente = cf.execSql(query, Arr,conn);
     return ActualizoCorrectamente;
  }
   
}

